/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.losalpes.compra;

import com.losalpes.businessEntities.Articulo;
import com.losalpes.persistence.entity.Compra;
import java.util.ArrayList;
/**
 *
 * @author mgorduz
 */
public interface ICompraService {
    /**
     * Agrega una compra al listado de compras
     * @param compra
     */
    void add(Compra compra);

    /**
     * Trae todas las compras almacenadas en el
     * sistema
     * @return Listado de compras almacenadas
     */
    ArrayList<Compra> findAll();

    /**
     * Metodo usado para traer las compras
     * realizadas en un rango de fechas
     * @param fechaInicial
     * @param fechaFinal
     * @return Listado de fechas que corresponden
     * al rango ingresado
     */
    ArrayList<Compra> findAllByDate(String fechaInicial, String fechaFinal);

    /**
     * Meotodo usado para traer el producto
     * mas vendido en una ciudad por un rango de fechas
     * @param fechaInicial
     * @param fechaFinal
     * @param ciudad
     * @return Articulo mas vendido en una ciudad
     */
    Articulo findMostSold(String fechaInicial, String fechaFinal, String ciudad);

    /**
     * Metodo usado para traer todas las compras
     * realizadas por un cliente
     * @param numeroDocumento Id del cliente
     * @return Listado de compras del cliente
     */
    ArrayList<Compra> findAllByCustomerId(String numeroDocumento,
            String fechaInicial, String fechaFinal);

    /**
     * Metodo que retorna los articulos de tipo interior
     * en un set de compras
     * @param compras
     * @return Listado de articulos de tipo interior
     */
    ArrayList<Articulo> findAllArticulosByTipoInterior(ArrayList<Compra> compras);

    /**
     * Metodo que retorna los articulos de tipo exterior
     * en un set de compras
     * @param compras
     * @return Listado de articulos de tipo exterior
     */
    ArrayList<Articulo> findAllArticulosByTipoExterior(ArrayList<Compra> compras);

    /**
     * Metodo usado para calcular el total por articulos visualizados
     * en el reporte
     * @param articulosExterior articulos de tipo exterior
     * @param articulosInterior articulos de tipo interior
     * @return
     */
    double getTotal(ArrayList<Articulo> articulosExterior, ArrayList<Articulo> articulosInterior);

    /**
     * Metodo usado para retornar
     * las ciudades disponibles
     * que registraron compras
     * @return Listado de ciudades que facturaron
     */
    ArrayList<String> findAllCities();
}
